#include "Common.h"

// ThreadCache类，功能是为单个线程提供内存分配和释放的服务
class ThreadCache
{
public:
    // 申请内存的函数
    void *Allocate(size_t size);
    // 释放内存的函数，size变量是用来知道要在哈希桶内选择哪个桶来释放内存
    void Deallocate(void *ptr, size_t size);

    // 从中心缓存获取对象
    void *FetchFromCentralCache(size_t index, size_t size);

private:
    void ListTooLong(FreeList &, size_t);

private:
    // 小内存块的哈希桶，是一个FreeList的数组，用来根据申请内存的不同size来从不同的哈希桶获取内存
    FreeList _freeLists[NFREELIST];
};

// Linux下使用__thread关键字实现线程局部存储
// 定义一个线程局部变量，每个线程都有自己独立的ThreadCache指针
// 每个线程都有自己的ThreadCache对象，用来申请和释放内存
#ifdef _WIN32
static DWORD tlsIndex = TlsAlloc();
#else
static __thread ThreadCache *pTLSThreadCache = nullptr;
#endif
